package com.dpl.yyrj.utils;

import android.content.Context;
import android.text.TextUtils;
import com.tencent.mmkv.MMKV;
import java.util.Set;

/**
 * @author dpl
 * @date: 2025/8/2 星期六 17:03
 * @description
 **/
public class MMKVUtil {

    private static MMKV mmkv;

    /**
     * 初始化MMKV，建议在Application中调用
     * @param context 上下文
     */
    public static void init(Context context) {
        MMKV.initialize(context);
        mmkv = MMKV.defaultMMKV();
    }

    /**
     * 存储String类型数据
     * @param key 键
     * @param value 值
     */
    public static void putString(String key, String value) {
        if (TextUtils.isEmpty(key)) {
            return;
        }
        mmkv.putString(key, value);
    }

    /**
     * 获取String类型数据
     * @param key 键
     * @param defaultValue 默认值
     * @return 存储的值或默认值
     */
    public static String getString(String key, String defaultValue) {
        if (TextUtils.isEmpty(key)) {
            return defaultValue;
        }
        return mmkv.getString(key, defaultValue);
    }

    /**
     * 存储int类型数据
     * @param key 键
     * @param value 值
     */
    public static void putInt(String key, int value) {
        if (TextUtils.isEmpty(key)) {
            return;
        }
        mmkv.putInt(key, value);
    }

    /**
     * 获取int类型数据
     * @param key 键
     * @param defaultValue 默认值
     * @return 存储的值或默认值
     */
    public static int getInt(String key, int defaultValue) {
        if (TextUtils.isEmpty(key)) {
            return defaultValue;
        }
        return mmkv.getInt(key, defaultValue);
    }

    /**
     * 存储long类型数据
     * @param key 键
     * @param value 值
     */
    public static void putLong(String key, long value) {
        if (TextUtils.isEmpty(key)) {
            return;
        }
        mmkv.putLong(key, value);
    }

    /**
     * 获取long类型数据
     * @param key 键
     * @param defaultValue 默认值
     * @return 存储的值或默认值
     */
    public static long getLong(String key, long defaultValue) {
        if (TextUtils.isEmpty(key)) {
            return defaultValue;
        }
        return mmkv.getLong(key, defaultValue);
    }

    /**
     * 存储float类型数据
     * @param key 键
     * @param value 值
     */
    public static void putFloat(String key, float value) {
        if (TextUtils.isEmpty(key)) {
            return;
        }
        mmkv.putFloat(key, value);
    }

    /**
     * 获取float类型数据
     * @param key 键
     * @param defaultValue 默认值
     * @return 存储的值或默认值
     */
    public static float getFloat(String key, float defaultValue) {
        if (TextUtils.isEmpty(key)) {
            return defaultValue;
        }
        return mmkv.getFloat(key, defaultValue);
    }

    /**
     * 存储boolean类型数据
     * @param key 键
     * @param value 值
     */
    public static void putBoolean(String key, boolean value) {
        if (TextUtils.isEmpty(key)) {
            return;
        }
        mmkv.putBoolean(key, value);
    }

    /**
     * 获取boolean类型数据
     * @param key 键
     * @param defaultValue 默认值
     * @return 存储的值或默认值
     */
    public static boolean getBoolean(String key, boolean defaultValue) {
        if (TextUtils.isEmpty(key)) {
            return defaultValue;
        }
        return mmkv.getBoolean(key, defaultValue);
    }

    /**
     * 存储StringSet类型数据
     * @param key 键
     * @param value 值
     */
    public static void putStringSet(String key, Set<String> value) {
        if (TextUtils.isEmpty(key)) {
            return;
        }
        mmkv.putStringSet(key, value);
    }

    /**
     * 获取StringSet类型数据
     * @param key 键
     * @param defaultValue 默认值
     * @return 存储的值或默认值
     */
    public static Set<String> getStringSet(String key, Set<String> defaultValue) {
        if (TextUtils.isEmpty(key)) {
            return defaultValue;
        }
        return mmkv.getStringSet(key, defaultValue);
    }

    /**
     * 检查是否包含指定key
     * @param key 键
     * @return 是否包含
     */
    public static boolean contains(String key) {
        if (TextUtils.isEmpty(key)) {
            return false;
        }
        return mmkv.contains(key);
    }

    /**
     * 删除指定key的数据
     * @param key 键
     */
    public static void remove(String key) {
        if (TextUtils.isEmpty(key)) {
            return;
        }
        mmkv.remove(key);
    }

    /**
     * 清空所有数据
     */
    public static void clearAll() {
        mmkv.clearAll();
    }

    /**
     * 获取所有key
     * @return 所有key的集合
     */
    public static String[] getAllKeys() {
        return mmkv.allKeys();
    }

    /**
     * 获取数据大小
     * @return 数据大小（字节）
     */
    public static long getTotalSize() {
        return mmkv.totalSize();
    }

    /**
     * 获取实际占用空间大小
     * @return 实际占用空间大小（字节）
     */
    public static long getActualSize() {
        return mmkv.actualSize();
    }
}

